15442
2971
Stängd. Denna fråga behöver detaljer eller klarhet. För närvarande accepteras inte svar.
Vill du förbättra den här frågan? Lägg till detaljer och klargöra problemet genom att redigera det här inlägget.
Stängt för 1 år sedan.
Förbättra denna fråga
Jag gör en kodutmaning och jag vill hämta de första 3 värdena från min matris genom att ange startindex och bara få de första (3 eller kan vara vilken längd som helst) från startindex.
Jag försökte den här koden och den fungerar men kodstrukturen är för lång, så hur kan jag göra den kortare så att den kan vara lätt att förstå.
int n = 10;
dubbel signatur = ny dubbel [] {1, 1, 1};
dubbel [] ret = ny dubbel [n];
dubbel summa = 0;
ret [0] = signatur [0];
ret [1] = signatur [1];
ret [2] = signatur [2];
int x, i;
för (i = 0; i 
                                
Med LINQ kan du prova något så här:
var värden = array.Skip (index)
.Tagen)
.ToArray ();
Där index är indexet för det första objektet och n antalet artiklar du vill välja.
T.ex. https://dotnetfiddle.net/Pk1rwY
Som en sidoanteckning. Att använda LINQ betyder inte att din kod skulle vara snabbare. Det skulle vara mer kompakt / läsbart etc. För att du ska kunna bedöma hur performant är din kod måste du använda något som BenchmarkDotNet.
|
Ingen Linq-lösning:
privat statisk T [] Extrahera  (T [] källa, int frånIndex, int längd) {
if (null == källa)
kasta nytt ArgumentNullException (nameof (källa));
annars om (frånIndex <0)
kasta nytt ArgumentOutOfRangeException (nameof (fromIndex),
"Från index måste vara icke-negativt");
annars om (längd <0)
kasta nytt ArgumentOutOfRangeException (nameof (längd),
"Längden måste vara icke-negativ");
if (fromIndex> = source.Length || length == 0)
returnera ny T [0];
T [] resultat = ny T [Math.Min (längd, källa.Längd - frånIndex)];
Array.Copy (källa, frånIndex, resultat, 0, resultat.Längd);
returresultat;
}
Sedan
dubbel [] signatur = ny dubbel [] {0, 1, 2, 3, 4, 5};
dubbel [] ret = Extrahera (signatur, 3, 2);
Console.Write (string.Join (",", ret));
Resultat:
3, 4
|
Från din fråga måste du dra nytta av operatörerna .Take och .Skip.
var result = array.Skip (startingIndex) .Take (numberOfElements);
Från din kod verkar det alltså som om du försöker göra något lite annorlunda, nämligen summeringselement. .Sum-operatören kan vara till hjälp här.
|
Inte svaret du letar efter? Bläddra bland andra frågor taggade c # arrays linq eller ställ din egen fråga.